package com.kwedding.util;

import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;


/**
 * @author Mickey 父类转换成子类
 */
public class CopyerObject {

	public static <T> T copyerObject(Object fulei, Class<T> son) {
		if (fulei == null)
			return null;

		T child = null;
		try {
			child = son.newInstance();
		} catch (Exception e1) {
			e1.printStackTrace();
		}

		Method[] methods = fulei.getClass().getMethods();// 得到父类所有方法
		for (Method method : methods) {// 遍历父类方法
			try {
				if (method.getName().startsWith("get")) {// 得到父类的get方法
					Object value = method.invoke(fulei);// 通过get方法得到父类的值
					// 尝试得到子类的set方法 method.getReturnType()：即得到返回类
					Method child_method = child.getClass().getMethod(method.getName().replaceFirst("get", "set"),
							method.getReturnType());
					child_method.invoke(child, value);// 将父类的属性注入到子类里面去
				}
			} catch (Exception e) {
			}
		}
		return child;
	}

	public static <T> List<T> copyerListObject(List fulei, Class<T> son) {
		if (fulei == null || fulei.size() == 0)
			return new ArrayList<T>();
		List<T> list = new ArrayList<T>();
		fulei.stream().forEach(s -> {
			T t = CopyerObject.copyerObject(s, son);
			list.add(t);
		});
		return list;
	}
}